<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>介绍</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="internals2.variables.html">变量的使用</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="internals2.variables.creating.html">创建变量并设置值</a></div>
 <div class="up"><a href="internals2.variables.html">变量的使用</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="internals2.variables.intro" class="section">
   <h2 class="title">介绍</h2>
   <p class="para">
    为了在 PHP 核心中使用变量，就必须要学会 PHP 所使用的基本概念的差异。首先，PHP
    是一门动态的弱类型语言。其次，PHP 的写机制里会使用内存处理的引用计数的复本。请查阅<a href="features.gc.refcounting-basics.html" class="xref">引用计数基本知识</a> 章节以获得如何使用计数和引用的细节。
   </p>
   <p class="para">
    PHP 变量，通常来说，由两部分组成：标签（例如，可能是符号表中的一个条目）和实际变量容器。在此手册的绝大部分内容中都是针对变量容器。
   </p>
   <p class="para">
    变量容器，在代码中称为 <code class="code">zval</code>，掌握了所需处理变量的所有数据。
    包括实际值、当前类型、统计指向此容器的标签的数量，和指示这些标签是引用还是副本的标志。
    在 PHP 5.3 中，有关结构可在 <code class="code">Zend/zend.h</code> 中找到，类似于：
   </p>
   <div class="example-contents screen">
<div class="cdata"><pre>
typedef struct _zval_struct zval;

typedef union _zvalue_value {
    long lval;                 /* long value */
    double dval;               /* double value */
    struct {                   /* string type */
        char *val;
        int len;
    } str;
    HashTable *ht;             /* hash table value */
    zend_object_value obj;
} zvalue_value;
 
struct _zval_struct {
    /* Variable information */
    zvalue_value value;        /* value */
    zend_uint refcount__gc;
    zend_uchar type;           /* active type */
    zend_uchar is_ref__gc;
};

</pre></div>
   </div>
   <p class="para">
    在 <code class="code">zvalue_value</code>
    中，通过名称和注释可清楚地找到字段所使用的不同类型的内部表现形式——尤其是当你知道
    PHP 数组实际上是哈希表时。但是，其中也遗漏了几种
    PHP 类型：<code class="code">NULL</code>, <code class="code">boolean</code> 和 <code class="code">resources</code>。<code class="code">NULL</code> 不需要值，<code class="code">NULL</code> 就是此类型的值。对
    <code class="code">boolean</code> 和 <code class="code">resource</code> 的值来说，PHP 也使用值字段。比如
    <code class="code">boolean</code> 值，为 <code class="code">false</code> 时存放
    <code class="code">0</code>，为 <code class="code">true</code> 时存放 <code class="code">1</code>。<code class="code">resource</code>
    类型的变量存放的是资源的 id。
   </p>
   <p class="para">
    现在，有个好消息是你不需要知道这些细节，因为在 PHP 中总是使用宏；坏消息是有很多宏：
    有直接存取 <code class="code">zval</code> 的宏，还有经常是指向 <code class="code">zval</code>
    的指针，甚至是指向 <code class="code">zval</code>
    的指针的指针，大多数宏都有引用这些指针的捷径。这些宏分布于 <code class="code">Zend/zend.h</code>,
    <code class="code">Zend/zend_operators.h</code> 和 <code class="code">Zend/zend_API.h</code> 之中。
   </p>
  </div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="internals2.variables.html">变量的使用</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="internals2.variables.creating.html">创建变量并设置值</a></div>
 <div class="up"><a href="internals2.variables.html">变量的使用</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
